const jwt = require('jsonwebtoken');
const User = require('../models/user');

const login = async (req, res) => {
  try {
    const { username, password } = req.body;
    
    // 查找用户
    const user = await User.findOne({ where: { username } });
    if (!user) {
      return res.status(401).json({ error: '认证失败' });
    }
    
    // 验证密码
    const isValid = await user.validPassword(password);
    if (!isValid) {
      return res.status(401).json({ error: '认证失败' });
    }
    
    // 生成token
    const token = jwt.sign(
      { id: user.id, username: user.username, role: user.role },
      process.env.JWT_SECRET || 'your-secret-key',
      { expiresIn: '1d' }
    );
    
    res.json({ token });
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: '服务器内部错误' });
  }
};

const register = async (req, res) => {
  try {
    const { username, password, email, mobile, gender, age } = req.body;
    
    // 检查用户名或邮箱是否已存在
    const existingUser = await User.findOne({ 
      where: { [Op.or]: [{ username }, { email }] } 
    });
    
    if (existingUser) {
      return res.status(400).json({ error: '用户名或邮箱已存在' });
    }
    
    // 创建新用户
    const user = await User.create({ username, password, email, mobile, gender, age });
    
    res.status(201).json({ message: '用户注册成功' });
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: '服务器内部错误' });
  }
};

// 在文件顶部添加 Sequelize 操作符导入
const { Op } = require('sequelize');

module.exports = { login, register };

// 检查第40行附近代码，确保正确使用 Op 操作符
// 例如：where: { [Op.eq]: value }
